package com.staryy.activiti7_workflow;

import org.activiti.api.process.model.builders.ProcessPayloadBuilder;
import org.activiti.api.process.model.builders.StartProcessPayloadBuilder;
import org.activiti.api.runtime.shared.query.Page;
import org.activiti.api.runtime.shared.query.Pageable;
import org.activiti.api.task.model.Task;
import org.activiti.api.task.model.builders.TaskPayloadBuilder;
import org.activiti.api.task.runtime.TaskRuntime;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

/**
 * activiti7
 * 新特性 TaskRuntime
 * 进行操作前，必须登录Security
 */
@SpringBootTest
public class Part9_TaskRuntime {

    @Autowired
    private SecurityUtil securityUtil;
    @Autowired
    private TaskRuntime taskRuntime;

    /**
     * 获取当前登录用户任务
     */
    @Test
    public void getTaskByUser(){
        securityUtil.logInAs("bajie");
        Page<Task> taskPage = taskRuntime.tasks(Pageable.of(0, 100));
        List<Task> taskList = taskPage.getContent();
        for(Task task : taskList){
            System.out.println("getId： " + task.getId());
            System.out.println("getName： " + task.getName());
            System.out.println("getName： " + task.getStatus());
            System.out.println("getName： " + task.getCreatedDate());
            System.out.println("getName： " + task.getAssignee());
        }
    }

    /**
     * 完成任务
     */
    @Test
    public void completeTask(){
        securityUtil.logInAs("bajie");
        Task task = taskRuntime.task("任务ID");
        // task.getAssignee()为null时，表示当前登录人是这个任务的候选人，必须先拾取任务后再完成任务
        // Assignee存的是执行人或者候选人
        if(task.getAssignee() == null){
            // 拾取任务
            taskRuntime.claim(TaskPayloadBuilder.claim()
                    .withTaskId(task.getId())
                    .build());
        }
        // 完成任务
        taskRuntime.complete(TaskPayloadBuilder.complete()
                .withTaskId(task.getId())
                .build());

    }
}
